home *** CD-ROM | disk | FTP | other *** search
/ CD Exchange / CD Exchange - Volume 1.iso / graphics / utils / ham8-jpeg / source / jconfig.h < prev    next >
C/C++ Source or Header  |  1992-12-20  |  12KB  |  359 lines

  1. /*
  2.  * jconfig.h
  3.  *
  4.  * Copyright (C) 1991, 1992, Thomas G. Lane.
  5.  * This file is part of the Independent JPEG Group's software.
  6.  * For conditions of distribution and use, see the accompanying README file.
  7.  *
  8.  * This file contains preprocessor declarations that help customize
  9.  * the JPEG software for a particular application, machine, or compiler.
  10.  * Edit these declarations as needed (or add -D flags to the Makefile).
  11.  */
  12.  
  13.  
  14. /*
  15.  * These symbols indicate the properties of your machine or compiler.
  16.  * The conditional definitions given may do the right thing already,
  17.  * but you'd best look them over closely, especially if your compiler
  18.  * does not handle full ANSI C.  An ANSI-compliant C compiler should
  19.  * provide all the necessary features; __STDC__ is supposed to be
  20.  * predefined by such compilers.
  21.  */
  22.  
  23. /*
  24.  * HAVE_STDC is tested below to see whether ANSI features are available.
  25.  * We avoid testing __STDC__ directly for arcane reasons of portability.
  26.  * (On some compilers, __STDC__ is only defined if a switch is given,
  27.  * but the switch also disables machine-specific features we need to get at.
  28.  * In that case, -DHAVE_STDC in the Makefile is a convenient solution.)
  29.  */
  30.  
  31. #ifdef __STDC__            /* if compiler claims to be ANSI, believe it */
  32. #define HAVE_STDC
  33. #endif
  34.  
  35.  
  36. /* Does your compiler support function prototypes? */
  37. /* (If not, you also need to use ansi2knr, see SETUP) */
  38.  
  39. #ifdef HAVE_STDC        /* ANSI C compilers always have prototypes */
  40. #define PROTO
  41. #else
  42. #ifdef __cplusplus        /* So do C++ compilers */
  43. #define PROTO
  44. #endif
  45. #endif
  46.  
  47. /* Does your compiler support the declaration "unsigned char" ? */
  48. /* How about "unsigned short" ? */
  49.  
  50. #ifdef HAVE_STDC        /* ANSI C compilers must support both */
  51. #define HAVE_UNSIGNED_CHAR
  52. #define HAVE_UNSIGNED_SHORT
  53. #endif
  54.  
  55. /* Define this if an ordinary "char" type is unsigned.
  56.  * If you're not sure, leaving it undefined will work at some cost in speed.
  57.  * If you defined HAVE_UNSIGNED_CHAR then it doesn't matter very much.
  58.  */
  59.  
  60. /* #define CHAR_IS_UNSIGNED */
  61.  
  62. /* Define this if your compiler implements ">>" on signed values as a logical
  63.  * (unsigned) shift; leave it undefined if ">>" is a signed (arithmetic) shift,
  64.  * which is the normal and rational definition.
  65.  */
  66.  
  67. /* #define RIGHT_SHIFT_IS_UNSIGNED */
  68.  
  69. /* Define "void" as "char" if your compiler doesn't know about type void.
  70.  * NOTE: be sure to define void such that "void *" represents the most general
  71.  * pointer type, e.g., that returned by malloc().
  72.  */
  73.  
  74. /* #define void char */
  75.  
  76. /* Define const as empty if your compiler doesn't know the "const" keyword. */
  77. /* (Even if it does, defining const as empty won't break anything.) */
  78.  
  79. #ifndef HAVE_STDC        /* ANSI C and C++ compilers should know it. */
  80. #ifndef __cplusplus
  81. #define const
  82. #endif
  83. #endif
  84.  
  85. /* For 80x86 machines, you need to define NEED_FAR_POINTERS,
  86.  * unless you are using a large-data memory model or 80386 flat-memory mode.
  87.  * On less brain-damaged CPUs this symbol must not be defined.
  88.  * (Defining this symbol causes large data structures to be referenced through
  89.  * "far" pointers and to be allocated with a special version of malloc.)
  90.  */
  91.  
  92. #ifdef MSDOS
  93. #define NEED_FAR_POINTERS
  94. #endif
  95.  
  96.  
  97. /* The next three symbols only affect the system-dependent user interface
  98.  * modules (jcmain.c, jdmain.c).  You can ignore these if you are supplying
  99.  * your own user interface code.
  100.  */
  101.  
  102. /* Define this if you want to name both input and output files on the command
  103.  * line, rather than using stdout and optionally stdin.  You MUST do this if
  104.  * your system can't cope with binary I/O to stdin/stdout.  See comments at
  105.  * head of jcmain.c or jdmain.c.
  106.  */
  107.  
  108. #ifdef MSDOS            /* two-file style is needed for PCs */
  109. #ifndef USE_SETMODE        /* unless you have setmode() */
  110. #define TWO_FILE_COMMANDLINE
  111. #endif
  112. #endif
  113. #ifdef THINK_C            /* it's needed for Macintosh too */
  114. #define TWO_FILE_COMMANDLINE
  115. #endif
  116.  
  117. /* Define this if your system needs explicit cleanup of temporary files.
  118.  * This is crucial under MS-DOS, where the temporary "files" may be areas
  119.  * of extended memory; on most other systems it's not as important.
  120.  */
  121.  
  122. #ifdef MSDOS
  123. #define NEED_SIGNAL_CATCHER
  124. #endif
  125.  
  126. /* By default, we open image files with fopen(...,"rb") or fopen(...,"wb").
  127.  * This is necessary on systems that distinguish text files from binary files,
  128.  * and is harmless on most systems that don't.  If you have one of the rare
  129.  * systems that complains about the "b" spec, define this symbol.
  130.  */
  131.  
  132. /* #define DONT_USE_B_MODE */
  133.  
  134.  
  135. /* If you're getting bored, that's the end of the symbols you HAVE to
  136.  * worry about.  Go fix the makefile and compile.
  137.  */
  138.  
  139.  
  140. /* If your compiler supports inline functions, define INLINE
  141.  * as the inline keyword; otherwise define it as empty.
  142.  */
  143.  
  144. #ifdef __GNUC__            /* for instance, GNU C knows about inline */
  145. #define INLINE __inline__
  146. #endif
  147. #ifndef INLINE            /* default is to define it as empty */
  148. #define INLINE
  149. #endif
  150.  
  151. /* On a few systems, type boolean and/or macros FALSE, TRUE may appear
  152.  * in standard header files.  Or you may have conflicts with application-
  153.  * specific header files that you want to include together with these files.
  154.  * In that case you need only comment out these definitions.
  155.  */
  156.  
  157. typedef int boolean;
  158. #undef FALSE            /* in case these macros already exist */
  159. #undef TRUE
  160. #define FALSE    0        /* values of boolean */
  161. #define TRUE    1
  162.  
  163. /* This defines the size of the I/O buffers for entropy compression
  164.  * and decompression; you could reduce it if memory is tight.
  165.  */
  166.  
  167. #define JPEG_BUF_SIZE    4096 /* bytes */
  168.  
  169.  
  170.  
  171. /* These symbols determine the JPEG functionality supported. */
  172.  
  173. /*
  174.  * These defines indicate whether to include various optional functions.
  175.  * Undefining some of these symbols will produce a smaller but less capable
  176.  * program file.  Note that you can leave certain source files out of the
  177.  * compilation/linking process if you've #undef'd the corresponding symbols.
  178.  * (You may HAVE to do that if your compiler doesn't like null source files.)
  179.  */
  180.  
  181. /* Arithmetic coding is unsupported for legal reasons.  Complaints to IBM. */
  182.  
  183. /* Encoder capability options: */
  184. #undef  C_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */
  185. #undef  C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files?  (NYI) */
  186. #define ENTROPY_OPT_SUPPORTED        /* Optimization of entropy coding parms? */
  187. #define INPUT_SMOOTHING_SUPPORTED   /* Input image smoothing option? */
  188. /* Decoder capability options: */
  189. #undef  D_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */
  190. #define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
  191. #define BLOCK_SMOOTHING_SUPPORTED   /* Block smoothing during decoding? */
  192. #define QUANT_1PASS_SUPPORTED    /* 1-pass color quantization? */
  193. #define QUANT_2PASS_SUPPORTED    /* 2-pass color quantization? */
  194. /* these defines indicate which JPEG file formats are allowed */
  195. #define JFIF_SUPPORTED        /* JFIF or "raw JPEG" files */
  196. #undef  JTIFF_SUPPORTED        /* JPEG-in-TIFF (not yet implemented) */
  197. /* these defines indicate which image (non-JPEG) file formats are allowed */
  198. #define GIF_SUPPORTED        /* GIF image file format */
  199. /* #define RLE_SUPPORTED */    /* RLE image file format (by default, no) */
  200. #define PPM_SUPPORTED        /* PPM/PGM image file format */
  201. #define TARGA_SUPPORTED        /* Targa image file format */
  202. #undef  TIFF_SUPPORTED        /* TIFF image file format (not yet impl.) */
  203.  
  204. /* more capability options later, no doubt */
  205.  
  206.  
  207. /*
  208.  * Define exactly one of these three symbols to indicate whether you want
  209.  * 8-bit, 12-bit, or 16-bit sample (pixel component) values.  8-bit is the
  210.  * default and is nearly always the right thing to use.  You can use 12-bit if
  211.  * you need to support image formats with more than 8 bits of resolution in a
  212.  * color value.  16-bit should only be used for the lossless JPEG mode (not
  213.  * currently supported).  Note that 12- and 16-bit values take up twice as
  214.  * much memory as 8-bit!
  215.  * Note: if you select 12- or 16-bit precision, it is dangerous to turn off
  216.  * ENTROPY_OPT_SUPPORTED.  The standard Huffman tables are only good for 8-bit
  217.  * precision, so jchuff.c normally uses entropy optimization to compute
  218.  * usable tables for higher precision.  If you don't want to do optimization,
  219.  * you'll have to supply different default Huffman ta